<?php
/**
 * 文件上传的控制器类。
 * 
 * @author 沈旦
 *
 */
class FileUploadController extends CController
{
	public $defaultAction='create';
	
	/**
	 * 创建上传文件方法。
	 * 
	 * 在此方法中，首先会将文件名从UTF8编码为ASCII的编码。这样做的目的是避免用户上传中文文件名的图片时造成
	 * URL的编码问题。
	 * 
	 * 另外，根据图片位置不同，图片大小需要受到限制。图片大小和位置对应关系配置在：config\fileUpload.php中。
	 * 这里仅仅判断图片尺寸不能大于配置的大小。而不是精确的匹配。
	 * @return unknown_type
	 */
	public function actionCreate()
	{
		$model=new FileUploadForm;
		
		// 图片位置，默认0表示无限制
		$position = '0';
		
		if (isset($_GET['position']))
		{
		    $position = $_GET['position'];
		}
		
        if(isset($_POST['FileUploadForm']))
        {
            $model->attributes=$_POST['FileUploadForm'];
            $model->image=CUploadedFile::getInstance($model,'image');
            $filename = 'uploads/'.time().iconv("UTF-8","ASCII//IGNORE",$model->image->name);
            //$encodeName = iconv("UTF-8","GB2312//IGNORE",$filename); 
            $model->image->saveAs(''.$filename);
            
            $imageSizeConfig = include(Yii::app()->basePath.'/config/fileUpload.php');
            
            $sizelimit = array();
            if (isset($_POST['position']))
            {
                $sizelimit = $imageSizeConfig['imageSize'][$_POST['position']];
                
                $widthLimit = 0;
                $heightLimit = 0;
                if (isset($sizelimit))
                {
                    $widthLimit = $sizelimit[0];
                    $heightLimit = $sizelimit[1];
                }
                
                $filesize = getimagesize($filename);
                
                if (!empty($widthLimit))
                {
                    if ($filesize[0] > $widthLimit){
                     
                        $error = '错误：上传文件尺寸过宽！当前宽：'.$filesize[0].'，限制宽度：'.$widthLimit;
                        
                        $this->render('create', array('model'=>$model,'position'=>$position, 'error'=>$error,));
                        unlink($filename);
                        return;
                    }
                }
                
                if (!empty($heightLimit))
                {
                    if ($filesize[1] > $heightLimit){
                     
                        $error = '错误：上传文件尺寸过长！当前长：'.$filesize[1].'，限制长度：'.$heightLimit;
                        
                        $this->render('create', array('model'=>$model,'position'=>$position, 'error'=>$error,));
                        unlink($filename);
                        return;
                    }
                }
               
            }
            
            // 上传成功，则转到show页面
            $this->redirect(array('show','url'=>$filename));
        }
        $this->render('create', array('model'=>$model,'position'=>$position));
	}
	
	public function actionShow()
	{
		$url = $_GET['url'];
		if (isset($url)) {
			$this->render('show', array('url'=>$url));
		} else {
			$this->redirect(array('create'));
		}
	}
	
	
}